﻿#ifndef ISI_H
#define ISI_H

#include <QObject>
#include <QtSql>
#include <qfiledialog.h>
#include "../../viewsignal/src/globalvar.h"

class Isi;

/**
 * @brief The Isi class         Основной класс для получения информации из файла *.isi
 */
class Isi:public QObject
{
    Q_OBJECT
public:
    explicit Isi(const int numConnection = 1, QObject *parent = nullptr);
    ~Isi();
    /**
     * @brief createTable             создание таблиц header и data для Клиента
     */
    void createTable();
    /**
     * @brief insertHeader            вставка данных в таблицу header
     */
    bool insertHeader(QStringList list);
    /**
     * @brief insertData              вставка данных в таблицу data
     */
    bool insertData(QStringList list);
    /**
     * @brief selectRow               получить следующий номер (rowid) записи в таблице data после последней отображенной точки (сортировка по времени)
     * @param elapsed                 время последней отображенной точки
     * @return
     */
    int selectRow(int elapsed);
    /**
     * @brief selectTime              получить значение времени из базы данных по номеру строки и столбца
     * @param row                     номер строки
     * @param column                  номер столбца
     * @return
     */
    double selectTime(int row,int column);
    /**
     * @brief selectValue            получить значение бита необходимого элемента
     * @param row                    номер строки
     * @param column                 номер столбца
     * @param bit                    необходимый бит
     * @return
     */
    qint64 selectValue(int row, int column, int bit);
    /**
     * @brief selectValue           перегрузка метода selectValue
     * @param row                   номер строки
     * @param index                 номер параметра
     * @return
     */
    qint64 selectValue(int row, int index);
    /**
     * @brief getParams              получить количество параметров
     * @return
     */
    int getParams();
    /**
     * @brief open                   проверка открыта база данных или нет
     * @return
     */
    bool open();
    /**
     * @brief getCountIn             получить количество параметров на вход
     * @return
     */
    int getCountIn();
    /**
     * @brief getCountOut            получить количество параметров на выход
     * @return
     */
    int getCountOut();
    /**
     * @brief setPath               назначить адрес для базы данных
     * @param path
     */
    void setPath(const QString &path = "");
    /**
     * @brief path                  получить путь базе данных
     * @return
     */
    QString path();
    /**
     * @brief getNameParam          получить название параметра по индексу
     * @param index                 индекс параметра
     * @return                      вернет название параметра
     */
    QString getNameParam(int index);
    /**
     * @brief getRowCount           получить количество строк из таблицы data
     * @return
     */
    int getRowCount();
    /**
     * @brief getColumnCount        получить количество столбцов из таблицы data
     * @return
     */
    int getColumnCount();
    /**
     * @brief getValueItem          получить значение из таблицы data по номеру строки и столбца
     * @param row                   номер строки
     * @param column                номер столбца
     * @return                      вернет значение
     */
    QVariant getValueItem(int row, int column);
    /**
     * @brief getHeaderColumnCount  получить количество столбцов из таблицы header
     * @return
     */
    int getHeaderColumnCount();
    /**
     * @brief getHeaderRowCount     получить количество строк из таблицы header
     * @return
     */
    int getHeaderRowCount();
    /**
     * @brief getHeaderValueItem    получить значение из таблицы header по номеру строки и столбца
     * @param row                   номер строки
     * @param column                номер столбца
     * @return                      вернет значение
     */
    QVariant getHeaderValueItem(int row, int column);

private:
    /**
     * @brief d_path                путь к базе данных
     */
    QString d_path;
    /**
     * @brief d_db                  объект класса QSqlDatabase, необходим для получения данных из базы данных
     */
    QSqlDatabase d_db;

    /**
     * @brief d_nameConnection      имя подключения для базы данных
     */
    QString d_nameConnection;
};

#endif // ISI_H
